# '''
# ATM机所需功能:
# 1.用户数据
# 2.交互界面
# 3.登录
# 4.显示余额
# 5.取钱
# 6.存钱
# 7.退出
# '''
#
# # 用户数据
users_data=[
    {'user':'a123','pw':'123','money':8888},
    {'user':'b123','pw':'123','money':0},
    {'user':'c123','pw':'123','money':18},
    {'user':'d123','pw':'123','money':1328}
]
#
# # 定义空列表的目的是让ATM记住当前登录的用户信息
user_list=[]
#
# # 交互界面
def show_face():
    '''给用户展示的交互界面<
    :return:
    '''
    print('='*33,'ATM操作界面','='*33)
    print('|{:^36}|{:^36}|'.format('1.登录','2.余额'))
    print('-'*78)
    print('|{:^36}|{:^36}|'.format('3.存钱','4.取钱'))
    print('-' * 78)
    print('|{:^75}|'.format('5.退出'))
    print('-' * 78)
#
# 登入
def login():
    '''
    判断登录信息是否存在用户数据中,并临时记录在user_list中
    :return:
    '''
#     声明user_list是全局变量,方便登录函数添加当前登录用户的信息给其他函数用
    global user_list
#     等待用户输入自己的账号密码
    key_u=input('请输入用户名:')
    key_p=input('请输入密码:')
    #用遍历和枚举得到一个索引序列,数据下标
    for i, user_dict in enumerate(users_data):
        # 判断用户输入的信息是否存在
        if user_dict['user']==key_u and user_dict['pw']==key_p:
            # 当用户的信息存在后,把索引和user存到user_list中
            # user_list.append(i)
            user_list.append(user_dict)

        # 判断列表是不是为空
        if user_list !=[]: #!= 不等于
            # 不为空时,代表用户输入的用户存在,则提示登录成功
            print('{:^76}'.format('------登录成功------\n'))
            # 否则就是没有找到用户数据,代表账号或密码错误
        else:
            # 提示用户是否需要重新输入,输入y重新引用本函数,否则结束本函数
            if input('您输入的密码有误,是否重新输入?y/n')=='y':
                login()
# 登出
def logOut():
    '''登出也是退出的函数,后期函数可扩展成退出时保存用户操作的信息到数据库
    :return:
    '''
    print('='*78)
    print('='*30,'感谢使用,再见!','='*29)
    print('='*78)

# 余额
def balance():
    '''
    查询用户余额
    :return:
    '''
    print('=' * 78)
    # print(user_list)
    # 通过登入函数中临时保存的列表中的索引,就可以找出当前用户的余额信息
    print(' '*26,'您的账户余额为{:^8}元!'.format(user_list[0]['money']))
    print('=' * 78)

# 存钱
def save_money():
    '''存钱函数
    '''
# 当用户输入的不是整数,报错并返回重新调用本函数,报错时使用return组织程序继续往下运行
    key_sm=float(input('请输入您要存款的金额:'))
#     is_integer()判断一个浮点是否为整数,小数为FALSE
    if key_sm. is_integer()==False:
        print('只能输入整数!')
        save_money()
    else:
        # 把 用户输入的整数加到用户数据中,用户数据的定位也来自登入提供的临时列表
        user_list[0]['money']+=key_sm
        print('='*78)
# 使用format占位
        print(' '*28,'您已成功存款{:^8}元!'.format(key_sm))
        print('='*78)

#取钱
def draw_money():
    '''
    取钱
    :return:
    '''
# 当用户输入的不是整数,报错返回重新调用本函数,报错时使用return组织程序继续往下运行
    key_dm=float(input('请输入要取款的金额:'))
# 判断输入的是否为整数,整数返回True
    if key_dm. is_integer()==False:
        print('只能输入整数!')
        draw_money()
#判断余额是否大于取款金额,当账户余额充足,执行取款
    if user_list[0]['money']>=key_dm:
        user_list[0]['money'] -= key_dm
        print('=' * 78)
        print(' ' * 28, '您已成功取款{:^8}元!'.format(key_dm))
        print('=' * 78)
    else:#当用户余额不足时,告知并结束本函数
        print('=' * 78)
        print('{:^78}'.format('余额不足!'))
        print('=' * 78)
        head()
#
#
#         总控制函数
def head():
    '''
    界面控制
    :return:
    '''
# 使用while循环保证用户输入后能继续使用
    while True:
        # 调用界面
        show_face()
        key=input('请选择:')
        if key=='1':
            # 判断用户是否登录,如已登录就提醒,没登录则执行登录
            if user_list!=[]:
                print('-'*20,'您已经登录,如需要登录新账户,请先退出','-'*20)
            else:
                login()
        elif key=='2':
            # 判断用户是否登录,未登录则提醒登录,已登录则前往余额函数
            if user_list==[]:
                print('='*28,'您尚未登录,请先登录!','='*28)
            else:
                balance()
                input('任意键返回')
        elif key=='3':
            # 判断用户是否登录,未登录则提醒登录,已登录则前往存钱函数
            if user_list == []:
                print('='*28,'您尚未登录,请先登录!','='*28)
            else:
                save_money()
                input('任意键返回')
        elif key=='4':
            # 判断用户是否登录,未登录则提醒登录,已登录则前往存钱函数
            if user_list==[]:
                print('='*28,'您尚未登录,请先登录!','='*28)
            else:
                draw_money()
                input('任意键返回!')
        elif key=='5':
#             前往登出函数
            logOut()
            break
        else:
#             如果输入指定以外的按键,提醒有误
            print('输入有误,请重新输入!')
head()

